

# 有了多线程（threading）和多进程（multiprocessing），
# 就没必要一定支持异步了。如果一个线程（或进程）阻塞，
# 新建其他线程（或进程）就可以了，程序不会卡死。
# 但是，多线程有"线程竞争"的问题，处理起来很复杂，还涉及加锁。
# 对于简单的异步任务来说（比如与网页互动），写起来很麻烦。

# Python 3.4 引入了 asyncio 模块，增加了异步编程，
# 跟 JavaScript 的async/await 极为类似，大大方便了异步任务的处理。

# https://www.ruanyifeng.com/blog/2019/11/python-asyncio.html


#!/usr/bin/env python3
# async.py

import asyncio

async def count():
    print("One")
    await asyncio.sleep(1)
    print("Two")

async def main():
    await asyncio.gather(count(), count(), count())

asyncio.run(main())

# One
# One
# One
# Two
# Two
# Two


# 协程的代码基本构成
# 特殊函数
#
# 在普通函数前添加一个async关键字，则该函数就变成一个特殊的函数
# 特殊函数的特殊之处是什么？
# 1.特殊函数被调用后，函数内部的程序语句（函数体）没有被立即执行
# 2.特殊函数被调用后，会返回一个协程对象
# https://blog.csdn.net/qq_34577961/article/details/123539364